Las expresiones que han salida hasta ahora cumplen con la propiedad siguiente: el tipo de los operandos es igual al tipo del resultado. Si tenemos una expresión como 3 + 4, el 3 es un int, el 4 es un int y el resultado (que es 7) es un int. Lo mismo ocurre con los reales y con la concatenación de strings.
Pero existen expresiones donde el tipo resultante no es el tipo de los operandos. Por ejemplo, si declaramos e inicializamos una variable real d
double d = 4.3;
entonces, la expresión d < 5.0 involucra dos operandos reales (la d y el 5.0) pero el resultado es "si o no", es decir, si el valor de d es menor que 5 o no. El resultado es, entonces, un bool (que admite solamente cierto o falso) y es diferente de los reales.
Se llaman "expresiones Booleanas" aquellas expresiones donde el tipo del resultado es Booleano. Son importantes porque se utilizan con mucha frecuencia, mayoritariamente en las Alternativas e Iteraciones.
Las expresiones Booleanas más sencillas son el menor y el mayor. Para recalcar que el resultado es Booleano, vamos a utilizar una variable p que almacene el resultado de las expresiones, y asignaremos en p todos los ejemplos que hagamos. El programa de prueba será el siguiente:
#include <iostream> using namespace std; int main() { bool p; double d = 4.3; p = d < 5.0; cout << p << endl; }
A primera vista, la instrucción p = d < 5.0 no se parece mucho a las que hemos visto antes, pero es una asignación como todas las otras. Primero calculamos la expresión de la parte derecha, d < 5.0 y luego el valor resultante lo almacenamos en p. La pregunta de si d es menor que 5.0 tiene respuesta "sí", por tanto d < 5.0 se evaluará a true y p contendrá ese valor después de la asignación. Por la pantalla, entonces, aparecerá un 1 (hay que recordar que false se muestra como un 0 por pantalla y true como un 1).
Algo parecido ocurriría si escribimos d > 5.0, pero esta vez el resultado es false y por pantalla saldrá 0.
Los operadores > y < permiten comparar los siguientes tipos:
Hay dos variaciones a los operadores > y < que son el mayor o igual (>=) y el menor o igual (<=). Ambos dan cierto también en el caso de que los operandos tengan el mismo valor. Las siguientes expresiones dan true:
3.7 >= 3.7 "asta" <= "asta" 125 >= 125 2.0 <= 2.0 'Y' <= 'Y' '8' >= '8'
Uno de los operadores que produce mayor confusión al principio es el de comparacion, ==. El problema más grave es que se puede confundir con la asignación. Veamos un ejemplo:
int main() { bool p; int a = 1, b = 2; p = a == b; cout << p << endl; }
La asignación p = a == b; es una instrucción que le indica al ordenador que haga algo como: "Determina si el valor de a es igual que el de b y coloca el resultado en p. A primera vista no es lo que parece. Si no nos fijamos, parece que ponga p = a = b, que sería muy distinto (qué te parece que quiere decir eso?). Aquí la culpa más grande parece que la tenga la asignación, que utiliza el = cuando quizás hubiera sido más lógico para la comparación. Con estos dos operadores hay que estar muy atento: = es para la asignación y == es para comparar dos números.
Por definición, la expresión a == b da cierto cuando los valores de a y b son iguales. El programa de arriba muestra un 0 por pantalla porque a == b es false, es decir, el valor de a no es el mismo que el de b. Llegados a este punto es interesante hacer pruebas con un programa escrito especialmente para confirmar que puedes anticipar el valor de expresiones Booleanas sencillas antes de mostrar su valor por pantalla.
El operador de comparación sirve, como los anteriores, también en los tipos int, double, char y string.
El operador contrario de == es !=, que devuelve cierto cuando el valor de los operandos es diferente. Si alteramos el programa anterior y lo dejamos así
int main() { bool p; int a = 1, b = 2; p = a != b; cout << p << endl; }
Entonces por pantalla saldrá un 1, porque la expresión a != b es cierta, ya que a tiene un valor distinto del de b.
En resumen, tenemos los siguientes operadores:
< | menor |
> | mayor |
<= | menor o igual |
>= | mayor o igual |
== | igual |
!= | diferente |
que permiten comparar dos valores de los tipos int, double, char o string.
Suponiendo las declaraciones
int n = 1, m = 5; double d = 2.5, e = 0.8; char c1 = 'a', c2 = 'b'; string s1 = "hi", s2 = "ho";
evalúa (determina el resultado de) las expresiones siguientes
n < m d < 2.5 "ho" == s2 e > 1.0 d > (e + 1.0) double(n) > e m < int(d) n == (m - 4) int(c1) > 90 s1 == "s1" c1 >= 'a' (s1 + "la") >= "hola" m >= 5 int(d + e) > 3 c2 == 'c' s1 >= s2 int(c2) != 98 s2 >= "hola" s1 == "hi there!" e != d s1 != s1 n + 2 < m - 3 3 < int(d + e) "c1" == s2
En preparación